package producto;

import java.util.ArrayList;
import java.util.List;
import java.util.Observable;
//import java.util.Observer;

import cliente.Cliente;

public class Deposito extends Observable{
	
	//Esto podria no ser una lista
	List<IProducto> productos;
	
	public Deposito(){
		productos = new ArrayList<IProducto>();
	}
	
	public List<IProducto> getProductos(){
		return this.productos;
	}
	
	public void agregarOferta(Oferta unaOferta){
		// avisar a los subscriptos a las ofertas
		this.getProductos().add(unaOferta);
		
		hasChanged();
		notifyObservers("Oferta");
		
	}
	
	public void suscribirAOfertas(Cliente unCliente){
		this.addObserver(unCliente);
	}

	public void agregarProducto(Producto unProducto) {
		// TODO Auto-generated method stub
		
		//Cada vez que agrega un producto deberia verificar los pedidos que
		//no pudo satisfacer... noup!, los productos son los observados
		
		//Si es un producto Observado
		/*
		hasChanged();
		notifyObservers("Pedido OK");
		 */
		
		//Solo deberia agregar productos que no existen en el inventario.
		//Si el producto existe debe incrementar la cantidad.
		
	}
	
	/*
	@Override
	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub}
		Cliente unCliente = (Cliente) o;
		this.addObserver(unCliente);
		
		Pedido unPedido = (Pedido) arg;
		observarProductosSinStockDe(unPedido);
		
	}
	
	private void observarProductosSinStockDe(Pedido unPedido) {
		// TODO Auto-generated method stub
		
	}
	*/

	//estos son los "filtros" se puede usar un template method todo se puede mejorar jaja
	
	 
	public List<IProducto>ProductosPorDebajoDeStockMinimo(){
		List<IProducto> resultado = new ArrayList<IProducto>();
		for (IProducto each:this.getProductos()){
		   if (each.getCantidadEnStock()<= each.getStockMinimo()){   
			   resultado.add(each);
		   }   
		}
		return resultado;
	}
	
	public List<IProducto>ProductosPorDebajoDeStockCritico(){
		List<IProducto> resultado = new ArrayList<IProducto>();
		for (IProducto each:this.getProductos()){
		   if (each.getCantidadEnStock()<= each.getStockCritico()){			   
			   resultado.add(each);
		   }		   
	   }
	return resultado;
	}
	
	
}
